/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package transervfx.Logica;

import java.util.List;
import transervfx.Dato.DAO.ClienteJuridicoDAO;
import transervfx.Dato.Entidad.Juridico;

/**
 *
 * @author silvi
 */
public class GestorClienteJuridico {
    
    private static GestorClienteJuridico INSTANCE = null;

    public GestorClienteJuridico() {
    }

    private synchronized static void createInstance() {
        if (INSTANCE == null) {
            INSTANCE = new GestorClienteJuridico();
        }
    }

    public static GestorClienteJuridico getInstance() {
        if (INSTANCE == null) {
            createInstance();
        }
        return INSTANCE;
    }

    public void guardarCliente(Juridico r) {
        ClienteJuridicoDAO.getInstance().persist(r);
    }

    public void actualizarCliente(Juridico r) {
        ClienteJuridicoDAO.getInstance().update(r);
    }

    public void eliminarCliente(Juridico r) throws Exception {
        //esto lanzaria una excepcion a la ventana, la cual mostraria el error (el msj de la exception)
        //entonces conviene meterle excepciones y dsespues lo cazas cuando tengas que mostrr el msj de error, o warning o eso
        //claro, porq el error puede ser por otra cosa, en este caso es solo por la guia, pero suponete q es por mas de una cosa
        //como no podes retornar multiples valores string se hace medio dificil, creo q esta forma es la mas limpia

        System.out.println("POSEE DEUDA: " + ClienteJuridicoDAO.getInstance().poseeDeuda(r));
        if (ClienteJuridicoDAO.getInstance().poseeDeuda(r)) {
            throw new Exception("El cliente posee una deuda, no puede ser eliminado");
        }

        ClienteJuridicoDAO.getInstance().remove(r);
    }

    
    public boolean existeClienteJuridico(Integer cuit) {
        Juridico r = ClienteJuridicoDAO.getInstance().findJuridicoByCuit(cuit);
        if (r == null) {
            return false;
        } else {
            return true;
        }
    }
    
    
    public List<Juridico> findAll() {
        return ClienteJuridicoDAO.getInstance().findAll();
    }

    public Juridico findByCompleto(Juridico clienteJuridicoSeleccionado) {
        return ClienteJuridicoDAO.getInstance().findByCompleto(clienteJuridicoSeleccionado);
    }

    public Juridico findByRazonSocialAndCuit(String razonSocial, Integer cuit) {
        return ClienteJuridicoDAO.getInstance().findByRazonSocialAndCuit(razonSocial, cuit);
    }

    public Long numeroDeClientesJuridicosFiltrados(String razonSocial,Integer cuit, String condicionIva) {
        return ClienteJuridicoDAO.getInstance().numeroDeClientesJuridicosFiltrados(razonSocial, cuit, condicionIva);
    }

    public List<Juridico> buscarPorFiltro(String razonSocial,Integer cuit, String condicionIva, int ini, int fin) {
        return ClienteJuridicoDAO.getInstance().buscarPorFiltroRango(razonSocial,cuit,condicionIva, ini, fin);
    }


}
